package com.jrx.anytxn.param.service.product;

import com.jrx.anytxn.common.exception.TxnBizException;
import com.jrx.anytxn.common.exception.TxnException;
import com.jrx.anytxn.i18n.response.TxnPage;
import com.jrx.anytxn.param.dto.product.InterestTableReq;
import com.jrx.anytxn.param.dto.product.InterestTableRes;
import com.jrx.anytxn.param.entity.PrInterestTable;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 利息表 业务接口
 *
 * @author yx
 * @date 2019/4/30
 */
public interface IInterestTableService {


    /**
     * 根据租户ID分页查询利息参数信息
     *
     * @param pageNum  页码
     * @param pageSize 页大小
     * @param tenantId 租户ID
     * @return com.jrx.anytxn.common.data.TxnPage<com.jrx.anytxn.param.dto.product.InterestTableRes>
     * @author fan.yang
     * date: 2019/10/14 0014 下午 13:29
     */
    TxnPage<InterestTableRes> findAllPageByTenId(Integer pageNum, Integer pageSize, String tenantId);

    /**
     * 根据租户ID查询所有利息参数信息
     *
     * @param tenantId 租户ID
     * @return com.jrx.anytxn.common.data.TxnPage<com.jrx.anytxn.param.dto.product.InterestTableRes>
     * @author fan.yang
     * date: 2019/10/14 0014 下午 13:29
     */
    List<InterestTableRes> findAllByTenId(String tenantId);


    /**
     * 添加利息参数
     *
     * @param interestTableReq 利率请求实体
     * @return com.jrx.anytxn.param.dto.product.InterestTableRes
     * @author fan.yang
     * date: 2019/10/14 0014 下午 13:30
     */
    InterestTableRes addInterestTable(InterestTableReq interestTableReq) throws TxnException;


    /**
     * 更新利息参数
     *
     * @param interestTableReq 利率请求实体
     * @return com.jrx.anytxn.param.dto.product.InterestTableRes
     * @author fan.yang
     * date: 2019/10/14 0014 下午 13:30
     */
    InterestTableRes modifyInterestTable(InterestTableReq interestTableReq) throws TxnException;

    /**
     * 通过租户Id和利率表ID删除利息参数
     *
     * @param tenantId   租户Id
     * @param interestId 利率表ID
     * @return java.lang.Boolean
     * @author fan.yang
     * date: 2019/10/14 0014 下午 13:38
     */
    Boolean removeByTenIdAndInterestId(String tenantId, String interestId) throws TxnException;

    /**
     * 通过租户ID和利率表ID查询利息参数
     *
     * @param tenantId   租户ID
     * @param interestId 利率表ID
     * @return com.jrx.anytxn.param.dto.product.InterestTableRes
     * @author fan.yang
     * date: 2019/10/14 0014 上午 11:54
     */
    InterestTableRes findByTenIdAndInterestId(String tenantId, String interestId) throws TxnException;

    /**
     * 通过利率ID，及机构获取利率信息
     *
     * @param interestId
     * @param orgId
     * @throws TxnException
     * @Author: haopu.zheng
     * @return: com.jrx.anytxn.param.account.dto.InterestTableRes
     * @Date: 2019/7/30
     **/
    InterestTableRes findByInterestId(String interestId, String orgId, String tenantId) throws TxnException;

    /**
     * 通过利率ID，及机构获取利率信息
     * aAuthor: haopu.zheng
     *
     * @param interestId 利率id
     * @return : com.jrx.anytxn.param.account.dto.InterestTableRes
     * date: 2019/7/30
     **/
    PrInterestTable findInterestByInterestId(String interestId, String tenantId) throws TxnBizException;

    /**
     * 日利率计算
     * @param interestId
     * @param tenantId
     * @param businessDate
     * @return
     */
    BigDecimal getDailyRate(String interestId, String tenantId, Date businessDate) throws TxnBizException;

    /**
     * 月利率计算
     * @param interestId
     * @param tenantId
     * @param businessDate
     * @return
     */
    BigDecimal getMonthRate(String interestId, String tenantId, Date businessDate) throws TxnBizException;

    /**
     * 年利率计算
     * @param interestId
     * @param tenantId
     * @return
     * @throws TxnBizException
     */
    BigDecimal getYearRate(String interestId, String tenantId) throws TxnBizException;

    /**
     * 日利率计算
     * @param prInterestTable
     * @param businessDate
     * @return
     * @throws TxnBizException
     */
    BigDecimal getDailyRate(PrInterestTable prInterestTable, Date businessDate) throws TxnBizException;

    /**
     * 月利率计算
     * @param prInterestTable
     * @param businessDate
     * @return
     * @throws TxnBizException
     */
    BigDecimal getMonthRate(PrInterestTable prInterestTable, Date businessDate) throws TxnBizException;

    /**
     * 年利率计算
     * @param prInterestTable
     * @return
     * @throws TxnBizException
     */
    BigDecimal getYearRate(PrInterestTable prInterestTable) throws TxnBizException;

    /**
     * 获取年利率基础天数
     *
     * @param yearBaseParam
     * @return
     */
    int getYearBase(String yearBaseParam);

    /**
     * 获取月利率基础天数
     *
     * @param monthBaseParam
     * @param businessDate
     * @return
     */
    int getMonthBase(String monthBaseParam, Date businessDate);

}
